package com.softer.chengxin.userinfo.dao;

import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.userinfo.dao.provider.UserInfoDaoProvider;
import com.softer.chengxin.userinfo.entity.UserInfo;
import com.softer.chengxin.userinfo.entity.UserSearch;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author Gong Zhiyang
 * @date 2018/10/13
 */
@Mapper
@Repository
public interface UserInfoDao {


    /**
     * 查询登录用户的身份
     *
     * @param loginName
     * @return
     */
    @Select("SELECT r.dic_code AS code,m.login_name AS loginName FROM roules r LEFT JOIN  manager_user m ON r.id = m.role_id WHERE m.login_name = #{loginName}")
    Map<String, String> getLoginNameRole(String loginName);

    /**
     * 根据Id获取用户信息
     *
     * @param id
     * @return
     */
    @Select("SELECT id, login_name as username,login_pwd as password ,name ,role_id as rolesid ,area as corpid FROM manager_user WHERE id=#{id}")
    UserInfo getUserInfoById(@Param("id") Integer id);

    /**
     * 删除管理用户
     *
     * @param id 用户Id
     * @return 处理结果
     */

    @Delete("DELETE FROM manager_user WHERE id=#{id}")
    int deleteUserInfo(@Param("id") String id);

    /**
     * 新增管理用户
     *
     * @param userInfo  用户信息
     * @param loginName 添加人
     * @return 处理结果
     */
    @Insert("INSERT INTO manager_user(`login_name`, `login_pwd`, `name`, `role_id`, `area`, `gmt_create`,gmt_modified, `adder`) " +
            "VALUES(#{userInfo.username},#{userInfo.password},#{userInfo.name},#{userInfo.rolesid},#{userInfo.corpid},now(),now(),#{loginName})")
    int addUserInfo(@Param("userInfo") UserInfo userInfo, @Param("loginName") String loginName);

    /**
     * 编辑用户信息
     *
     * @param userInfo  用户信息
     * @param loginName 登陆名
     * @return 处理结果
     */
    @Update("UPDATE manager_user SET login_name=#{user.username},login_pwd=#{user.password},name=#{user.name},role_id=#{user.rolesid},area=#{user.corpid},gmt_modified=NOW(),adder=#{loginName} where id=#{user.id}")
    int updateUserInfo(@Param("user") UserInfo userInfo, @Param("loginName") String loginName);

    /**
     * 查询用户名是否存在
     *
     * @param userName 用户名
     * @return 用户id
     */
    @Select("SELECT login_name FROM manager_user WHERE login_name=#{userName}")
    String checkUserName(@Param("userName") String userName);

    /**
     * 加载登陆用户创建的用户列表
     *
     * @param page       页面信息
     * @param userSearch 查询实体
     * @param loginName  登陆用户
     * @return 用户列表
     */
    @SelectProvider(type = UserInfoDaoProvider.class, method = "load")
    List<UserInfo> load(@Param("page") Page page, @Param("loginName") String loginName, @Param("userSearch") UserSearch userSearch);

    /**
     * 查询登陆用户创建的用户数量
     *
     * @param loginName  登陆用户名
     * @param userSearch 查询实体
     * @return 用户数量
     */
    @SelectProvider(type = UserInfoDaoProvider.class, method = "getUserNum")
    int getUserNum(@Param("loginName") String loginName, @Param("userSearch") UserSearch userSearch);

    /**
     * 根据ID查询区/街道名字
     *
     * @param id 区/街道ID
     * @return 区/街道名字
     */
    @Select("SELECT name FROM `district_street` WHERE id=#{id}")
    String getDistrictName(@Param("id") Integer id);
}
